package fr.afcepf.atod18.entity;

import java.util.Calendar;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;


//Annotations
@Entity
@Table
public class Restaurant {
	
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String nom;
private int nombreDeCouverts;
private int capaciteLivraison;
@Temporal(TemporalType.DATE)
private Calendar dateAffiliation;
private double commandeMin;
private double fourchettePrix;

@ManyToOne(fetch=FetchType.LAZY) 
private Restaurateur restaurateur;
@ManyToOne(fetch=FetchType.LAZY) 
private TypeCuisine typeCuisine;
@ManyToOne(fetch=FetchType.LAZY) 
private Adresse adresse;

@OneToMany(cascade= {CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
@JoinTable(name="Restaurant_Horaire",joinColumns={@JoinColumn(name="id")}, inverseJoinColumns={@JoinColumn(name="idHoraire")})
private Set<Horaire> horaire;

@OneToMany(cascade= {CascadeType.MERGE, CascadeType.REMOVE} , fetch=FetchType.LAZY)
@JoinTable(name="Restaurant_Carte",joinColumns={@JoinColumn(name="id")}, inverseJoinColumns={@JoinColumn(name="idCarte")})
private Set<Carte> cartes;

@OneToMany(cascade= {CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
@JoinTable(name="Restaurant_Promotion",joinColumns={@JoinColumn(name="id")}, inverseJoinColumns={@JoinColumn(name="idPromotion")})
private Set<Promotion> promotions;


public Restaurant() {
	super();
}
public Restaurant(String nom, int nombreDeCouverts, int capaciteLivraison,
		TypeCuisine typeCuisine, Set<Carte> cartes) {
	super();
	this.nom = nom;
	this.nombreDeCouverts = nombreDeCouverts;
	this.capaciteLivraison = capaciteLivraison;
	this.typeCuisine = typeCuisine;
	this.cartes = cartes;
}
public Set<Carte> getCartes() {
	return cartes;
}
public Adresse getAdresse() {
	return adresse;
}
public void setAdresse(Adresse adresse) {
	this.adresse = adresse;
}
public Set<Horaire> getHoraire() {
	return horaire;
}
public void setHoraire(Set<Horaire> horaire) {
	this.horaire = horaire;
}
public void setCartes(Set<Carte> cartes) {
	this.cartes = cartes;
}
public Set<Promotion> getPromotions() {
	return promotions;
}
public void setPromotions(Set<Promotion> promotions) {
	this.promotions = promotions;
}

public TypeCuisine getTypeCuisine() {
	return typeCuisine;
}
public void setTypeCuisine(TypeCuisine typeCuisine) {
	this.typeCuisine = typeCuisine;
}
public Restaurateur getRestaurateur() {
	return restaurateur;
}
public void setRestaurateur(Restaurateur restaurateur) {
	this.restaurateur = restaurateur;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getNom() {
	return nom;
}
public void setNom(String nom) {
	this.nom = nom;
}
public int getNombreDeCouverts() {
	return nombreDeCouverts;
}
public void setNombreDeCouverts(int nombreDeCouverts) {
	this.nombreDeCouverts = nombreDeCouverts;
}
public int getCapaciteLivraison() {
	return capaciteLivraison;
}
public void setCapaciteLivraison(int capaciteLivraison) {
	this.capaciteLivraison = capaciteLivraison;
}
public Calendar getDateAffiliation() {
	return dateAffiliation;
}
public void setDateAffiliation(Calendar dateAffiliation) {
	this.dateAffiliation = dateAffiliation;
}
public double getCommandeMin() {
	return commandeMin;
}
@Override
public String toString() {
	return "Restaurant [id=" + id + ", nom=" + nom + "]";
}
public void setCommandeMin(double commandeMin) {
	this.commandeMin = commandeMin;
}
public double getFourchettePrix() {
	return fourchettePrix;
}
public void setFourchettePrix(double fourchettePrix) {
	this.fourchettePrix = fourchettePrix;
}

}
